{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "data = {\n",
    "    'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n",
    "    'Name': ['John Doe', 'Jane Smith', 'Bob Johnson', 'Alice Williams', 'Chris Evans', 'Patricia Brown', 'Michael Davis', 'Linda Martinez', 'James Wilson', 'Barbara Anderson'],\n",
    "    'Age': [28, 34, 45, 29, None, 38, 50, 27, 31, 40],\n",
    "    'Salary': [50000, 60000, None, 55000, 70000, 65000, 80000, 48000, 52000, 75000],\n",
    "    'Department': ['Sales', 'Engineering', 'HR', 'Sales', 'Engineering', 'HR', 'Sales', 'Engineering', 'HR', 'Sales'],\n",
    "    'JoinDate': ['2020-01-15', '2019-03-22', '2018-07-30', '2021-05-18', '2017-11-01', '2016-09-12', None, '2020-02-25', '2019-12-05', '2018-04-10'],\n",
    "    'PerformanceScore': ['Excellent', 'Good', 'Average', 'Excellent', 'Good', 'Good', 'Excellent', 'Average', 'Good', 'Excellent']\n",
    "}\n",
    "df=pd.DataFrame(data)\n",
    "df.to_csv('data.csv',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   ID            Name   Age   Salary   Department    JoinDate PerformanceScore\n",
      "0   1        John Doe  28.0  50000.0        Sales  2020-01-15        Excellent\n",
      "1   2      Jane Smith  34.0  60000.0  Engineering  2019-03-22             Good\n",
      "2   3     Bob Johnson  45.0      NaN           HR  2018-07-30          Average\n",
      "3   4  Alice Williams  29.0  55000.0        Sales  2021-05-18        Excellent\n",
      "4   5     Chris Evans   NaN  70000.0  Engineering  2017-11-01             Good\n",
      "============\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 10 entries, 0 to 9\n",
      "Data columns (total 7 columns):\n",
      " #   Column            Non-Null Count  Dtype  \n",
      "---  ------            --------------  -----  \n",
      " 0   ID                10 non-null     int64  \n",
      " 1   Name              10 non-null     object \n",
      " 2   Age               9 non-null      float64\n",
      " 3   Salary            9 non-null      float64\n",
      " 4   Department        10 non-null     object \n",
      " 5   JoinDate          9 non-null      object \n",
      " 6   PerformanceScore  10 non-null     object \n",
      "dtypes: float64(2), int64(1), object(4)\n",
      "memory usage: 688.0+ bytes\n",
      "None\n",
      "============\n",
      "             ID        Age        Salary\n",
      "count  10.00000   9.000000      9.000000\n",
      "mean    5.50000  35.777778  61666.666667\n",
      "std     3.02765   8.058812  11500.000000\n",
      "min     1.00000  27.000000  48000.000000\n",
      "25%     3.25000  29.000000  52000.000000\n",
      "50%     5.50000  34.000000  60000.000000\n",
      "75%     7.75000  40.000000  70000.000000\n",
      "max    10.00000  50.000000  80000.000000\n",
      "============\n",
      "   ID            Name        Age  ...   Department   JoinDate PerformanceScore\n",
      "0   1        John Doe  28.000000  ...        Sales 2020-01-15        Excellent\n",
      "1   2      Jane Smith  34.000000  ...  Engineering 2019-03-22             Good\n",
      "2   3     Bob Johnson  45.000000  ...           HR 2018-07-30          Average\n",
      "3   4  Alice Williams  29.000000  ...        Sales 2021-05-18        Excellent\n",
      "4   5     Chris Evans  35.777778  ...  Engineering 2017-11-01             Good\n",
      "\n",
      "[5 rows x 7 columns]\n",
      "Afetr Correct errors and standardize the data\n",
      "   ID            Name        Age  ...   Department   JoinDate PerformanceScore\n",
      "0   1        John Doe  28.000000  ...        Sales 2020-01-15        Excellent\n",
      "1   2      Jane Smith  34.000000  ...  Engineering 2019-03-22             Good\n",
      "2   3     Bob Johnson  45.000000  ...           HR 2018-07-30          Average\n",
      "3   4  Alice Williams  29.000000  ...        Sales 2021-05-18        Excellent\n",
      "4   5     Chris Evans  35.777778  ...  Engineering 2017-11-01             Good\n",
      "\n",
      "[5 rows x 7 columns]\n",
      "   ID            Name        Age  ...   Department   JoinDate PerformanceScore\n",
      "0   1        John Doe  28.000000  ...        Sales 2020-01-15        Excellent\n",
      "1   2      Jane Smith  34.000000  ...  Engineering 2019-03-22             Good\n",
      "2   3     Bob Johnson  45.000000  ...           HR 2018-07-30          Average\n",
      "3   4  Alice Williams  29.000000  ...        Sales 2021-05-18        Excellent\n",
      "4   5     Chris Evans  35.777778  ...  Engineering 2017-11-01             Good\n",
      "\n",
      "[5 rows x 7 columns]\n",
      "After Normalize and scale numerical features\n",
      "         ID            Name       Age  ...   Department   JoinDate PerformanceScore\n",
      "0 -1.566699        John Doe -1.079045  ...        Sales 2020-01-15        Excellent\n",
      "1 -1.218544      Jane Smith -0.246639  ...  Engineering 2019-03-22             Good\n",
      "2 -0.870388     Bob Johnson  1.279439  ...           HR 2018-07-30          Average\n",
      "3 -0.522233  Alice Williams -0.940311  ...        Sales 2021-05-18        Excellent\n",
      "4 -0.174078     Chris Evans  0.000000  ...  Engineering 2017-11-01             Good\n",
      "\n",
      "[5 rows x 7 columns]\n",
      "After Encode categorical features\n",
      "         ID            Name  ...  PerformanceScore_Excellent  PerformanceScore_Good\n",
      "0 -1.566699        John Doe  ...                        True                  False\n",
      "1 -1.218544      Jane Smith  ...                       False                   True\n",
      "2 -0.870388     Bob Johnson  ...                       False                  False\n",
      "3 -0.522233  Alice Williams  ...                        True                  False\n",
      "4 -0.174078     Chris Evans  ...                       False                   True\n",
      "\n",
      "[5 rows x 11 columns]\n",
      "                 ID           Age  ...          5          6\n",
      "count  1.000000e+01  1.000000e+01  ...  10.000000  10.000000\n",
      "mean  -6.661338e-17 -6.661338e-17  ...   0.288834   0.849032\n",
      "min   -1.566699e+00 -1.217779e+00  ...  -1.156466   0.000000\n",
      "25%   -7.833495e-01 -8.709434e-01  ...  -0.105774   0.054950\n",
      "50%    0.000000e+00 -1.233194e-01  ...   0.126929   0.616193\n",
      "75%    7.833495e-01  5.164001e-01  ...   0.782730   1.107748\n",
      "max    1.566699e+00  1.973111e+00  ...   2.030867   3.516819\n",
      "std    1.054093e+00  1.054093e+00  ...   1.061436   1.086433\n",
      "\n",
      "[8 rows x 11 columns]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[<Axes: title={'center': 'ID'}>, <Axes: title={'center': 'Age'}>,\n",
       "        <Axes: title={'center': 'Salary'}>],\n",
       "       [<Axes: title={'center': 'JoinDate'}>,\n",
       "        <Axes: title={'center': '0'}>, <Axes: title={'center': '1'}>],\n",
       "       [<Axes: title={'center': '2'}>, <Axes: title={'center': '3'}>,\n",
       "        <Axes: title={'center': '4'}>],\n",
       "       [<Axes: title={'center': '5'}>, <Axes: title={'center': '6'}>,\n",
       "        <Axes: >]], dtype=object)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAGzCAYAAABzfl4TAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATqZJREFUeJzt3X1cVGX+P/7XcDeAcuMNiCTeZXmThalgaCkWwpZZ2NqalaKV3eyoubT2ED+baKVkVtqaq92sYCXpWqKumYoo+DXxDrUNTdPSNBW8QQFBh5G5fn/4Y3KcAeYMZ+acmXk9H4/zqDlzzlzvc817jm/OzXU0QggBIiIiIhl4KR0AERERuQ8WFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWRETk8eLj4xEfH690GG6BhYWTZGVlQaPRYO/evQCAGTNmQKPRmKbAwEC0b98ew4YNQ2ZmJvR6vcIRE93wr3/9CxqNBv369VM6FCIzP/74I0aMGIEOHTrA398ft912G4YMGYIFCxYoHZpH81E6AE+3aNEiNG/eHHq9HqdPn8bGjRvx3HPPYf78+Vi3bh2ioqKUDpE83LJly9CxY0fs3r0bx44dQ5cuXZQOiQg7duzA4MGD0b59e4wfPx4RERE4deoUdu7ciQ8//BATJ05UOkSPxcJCYSNGjEDr1q1Nr6dPn45ly5ZhzJgxePLJJ7Fz504FoyNPd/z4cezYsQOrVq3CSy+9hGXLliE9PV3psIgwa9YshISEYM+ePQgNDTV779y5c8oE9f+7fv06jEYj/Pz8FI1DKTwVokLPPPMMXnjhBezatQu5ublKh0MebNmyZWjRogWGDh2KESNGYNmyZRbLXLx4EaNHj0ZwcDBCQ0ORkpKCH374ARqNBllZWWbLHj58GCNGjEDLli3h7++Pvn37Yu3atU7aGnInv/zyC+666y6LogIAwsPDTf+fmZmJBx98EOHh4dBqtejRowcWLVrU6OfX1NRg+vTp6NOnD0JCQtCsWTM88MAD2Lp1q9lyJ06cgEajwXvvvYf58+fj9ttvh1arxe7du9GsWTO8+uqrFp/9+++/w9vbGxkZGdI33AWwsFCp0aNHAwA2bdqkcCTkyZYtW4YnnngCfn5+GDVqFI4ePYo9e/aY3jcajRg2bBi++uorpKSkYNasWTh79ixSUlIsPuvgwYO477778NNPP2Hq1Kl4//330axZMyQnJyMnJ8eZm0VuoEOHDigqKkJxcXGDyy1atAgdOnTAtGnT8P777yMqKgp//etfsXDhwgbXq6iowGeffYb4+HjMmTMHM2bMwPnz55GUlIQDBw5YLJ+ZmYkFCxbgxRdfxPvvv4/27dtj+PDhWLFiBWpra82W/eqrryCEwDPPPCN5u12CIKfIzMwUAMSePXuEEEKkp6cLAOL8+fNWl7906ZIAIIYPH+7MMIlM9u7dKwCI3NxcIYQQRqNRtGvXTrz66qumZb755hsBQMyfP980r7a2Vjz44IMCgMjMzDTNf+ihh8Tdd98trl27ZppnNBpF//79xR133OHw7SH3smnTJuHt7S28vb1FXFyceP3118XGjRtFTU2N2XLV1dUW6yYlJYnOnTubzRs0aJAYNGiQ6fX169eFXq83W+bSpUuiTZs24rnnnjPNO378uAAggoODxblz58yW37hxowAgvvvuO7P599xzj1lb7oZHLFSqefPmAIDKykqFIyFPtWzZMrRp0waDBw8GAGg0GowcORLLly83/QW2YcMG+Pr6Yvz48ab1vLy8oNPpzD6rrKwMW7ZswV/+8hdUVlbiwoULuHDhAi5evIikpCQcPXoUp0+fdt7GkcsbMmQICgsL8dhjj+GHH37Au+++i6SkJNx2221mp9cCAgJM/19eXo4LFy5g0KBB+PXXX1FeXl7v53t7e5uukTAajSgrK8P169fRt29f7Nu3z2L5P//5zwgLCzObl5CQgMjISLNTiMXFxfjf//6HZ5991u5tVzsWFip15coVAEBQUJDCkZAnqq2txfLlyzF48GAcP34cx44dw7Fjx9CvXz+UlpYiLy8PAPDbb7+hbdu2CAwMNFv/1jtHjh07BiEE3njjDYSFhZlNdReDKn3BHbmemJgYrFq1CpcuXcLu3buRlpaGyspKjBgxAocOHQIAfP/990hISECzZs0QGhqKsLAwTJs2DQAaLCwAYOnSpbjnnnvg7++PVq1aISwsDN9++63V9Tp16mQxz8vLC8888wxWr16N6upqADcKdn9/fzz55JNN3XzV4l0hKlV33pC39pEStmzZgrNnz2L58uVYvny5xfvLli1DYmKizZ9nNBoBAH//+9+RlJRkdRnmOtnLz88PMTExiImJ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t66vpLpY1BSTK7DWb+xDIiLXZXdhYTQaMXnyZAwYMAA9e/asd7mMjAzMnDnTYv6mTZsQGBhoNu/dWGkxrF+/XtoKTpCbm6t0CC7p5n6rrq5WMBIiImoKuwsLnU6H4uJibN++vcHl0tLSkJqaanpdUVGBqKgoJCYmIjg42GzZnjM2SoqheEaSpOXtYWtMWi+Bt/oa8cZeLxRN/5ODo3IfBoMBubm5GDJkCHx9fQH8cVSLiIhcj12FxYQJE7Bu3Tps27YN7dq1a3BZrVYLrVZrMd/X19f0D0kdfa1GUhy3ru8IUmPSGzVOicvd3JwP7D8iItclqbAQQmDixInIyclBfn4+OnXq5Ki4iIiIyAVJKix0Oh2ys7OxZs0aBAUFoaSkBAAQEhKCgIAAhwRIRERErkPSOBaLFi1CeXk54uPj0bZtW9O0YsUKR8VHRERELkTyqRAiIiKi+vBZIURERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkmyY9hIyI5NFzxka8G3vjv1JHe3UGrbdQVXwn3hkqafmOU791UCR/kBqTO5Pa3/b0nZQ21Ja/zuaM7+NmPGJBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJx6WeF2DP+vzPG81frcwnUNn4/ABx9K1FyG0REpF48YkFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsmFhQURERLJhYUFERESysauwWLhwITp27Ah/f3/069cPu3fvljsuIqdgLpO7YC6TWkguLFasWIHU1FSkp6dj3759iI6ORlJSEs6dO+eI+IgchrlM7oK5TGoiubD44IMPMH78eIwbNw49evTA4sWLERgYiCVLljgiPiKHYS6Tu2Auk5r4SFm4pqYGRUVFSEtLM83z8vJCQkICCgsLra6j1+uh1+tNr8vLywEAZWVlMBgM5sFcr5ISjl0uXrwoaXlbY/IxClRXG+Fj8EKtUWNPaJJI3Q5Aev86q43q6mpcvHgRvr6+AIDKykoAgBBC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q/v/W0+RNcRTTv80dArMHXnKdhLdzK7CYsKECVi3bh22bduGdu3ayR0TUZPYcooOAK5cuYIOHTrAaDSid+/emD17Nu666656l5d6Wu/WU2QN8bTTZ9ZOgbkjqaf1iNyBpMJCCIGJEyciJycH+fn56NSpk6PiIrKLrafounbtiiVLluCee+5BeXk53nvvPfTv3x8HDx6st1i29bSewWBAbm6upFNk7nQ6rCF1fWPtFJg7knpaj8gdSCosdDodsrOzsWbNGgQFBaGkpAQAEBISgoCAAIcESCSFrafo4uLiEBcXZ3rdv39/dO/eHR9//DHeeustq+tIOa0HSDtF5gn/yN6svj5zN56wjUS3kjSOxaJFi1BeXo74+Hi0bdvWNK1YscJR8RHZrO4U3datWyWfovP19cW9996LY8eOOSg6IiLPIPlUCJHayHGKrra2Fj/++CMeeeQRB0RIROQ5mjSOBZEa2HKKbsyYMbjtttuQkZEBAHjzzTdx3333oUuXLrh8+TLmzp2L3377DS+88IJi20FE5A5YWJDLW7RoEQAgPj7ebH5mZibGjh0LADh58iS8vP4483fp0iWMHz8eJSUlaNGiBfr06YMdO3agR48ezgqbiMgtsbAgl2fLKbr8/Hyz1/PmzcO8efMcFBERkefiY9OJiIhINjxiQaQCHad+K3mdE+8MdUAkRERNwyMWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbPivERfHZEkREpEY8YkFERESyYWFBREREsmFhQURERLJhYUFERESyYWFBREREsuFdIUQuyp47g5zBXe4+ktq/7rLdRE3FIxZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkGxYWREREJBsWFkRERCQbFhZEREQkG7sKi4ULF6Jjx47w9/dHv379sHv3brnjIpJMal6uXLkS3bp1g7+/P+6++26sX7/eSZESEbkvyYXFihUrkJqaivT0dOzbtw/R0dFISkrCuXPnHBEfkU2k5uWOHTswatQoPP/889i/fz+Sk5ORnJyM4uJiJ0dOROReJBcWH3zwAcaPH49x48ahR48eWLx4MQIDA7FkyRJHxEdkE6l5+eGHH+JPf/oTpkyZgu7du+Ott95C79698dFHHzk5ciIi9+IjZeGamhoUFRUhLS3NNM/LywsJCQkoLCy0uo5er4derze9Li8vBwCUlZXBYDCYB3O9Sko4uHjxoqTl7dFQTD5GgepqI3wMXqg1auxuw57tkNpX9rYjla1x1fXdxYsX4evra/ZeZWUlAEAIYdNn2ZOXhYWFSE1NNZuXlJSE1atX19uOrblsMBhQXV3d5LxwVQ3lWV3fWPve1UaO/ZHUXCZyB5IKiwsXLqC2thZt2rQxm9+mTRscPnzY6joZGRmYOXOmxfxOnTpJadqq1u83+SOa7GkZPsNZ26GG/rpZY31XWVmJkJCQRj/HnrwsKSmxunxJSUm97Tgyl92J2vLMWRrabltzmcgdSCos7JGWlmb2l6HRaERZWRlatWoFjca1/5qrqKhAVFQUTp06heDgYKXDcSkN9Z0QApWVlYiMjFQoOutszWXmRf08rW/UmstEjiSpsGjdujW8vb1RWlpqNr+0tBQRERFW19FqtdBqtWbzQkNDpUWpcsHBwR6xk3SE+vpOyl939uRlRESEpOUB6bnMvKifJ/UNj1SQp5F08aafnx/69OmDvLw80zyj0Yi8vDzExcXJHhyRLezJy7i4OLPlASA3N5d5TETURJJPhaSmpiIlJQV9+/ZFbGws5s+fj6qqKowbN84R8RHZpLG8HDNmDG677TZkZGQAAF599VUMGjQI77//PoYOHYrly5dj7969+OSTT5TcDCIilye5sBg5ciTOnz+P6dOno6SkBL169cKGDRssLoTzBFqtFunp6RaHx6lxcvddY3l58uRJeHn9cYCuf//+yM7Oxj/+8Q9MmzYNd9xxB1avXo2ePXs2ORbmRf3YN0TuTyN4HxQRERHJhM8KISIiItmwsCAiIiLZsLAgIiIi2bCwICIiItmwsCAiIiLZsLBogoULF6Jjx47w9/dHv379sHv3bqVDUr2MjAzExMQgKCgI4eHhSE5OxpEjR5QOSzbMCevc/Xsnoj+wsLDTihUrkJqaivT0dOzbtw/R0dFISkrCuXPnlA5N1QoKCqDT6bBz507k5ubCYDAgMTERVVXSn9aqNsyJ+rnz905E5jiOhZ369euHmJgYfPTRRwBuDCEdFRWFiRMnYurUqQpH5zrOnz+P8PBwFBQUYODAgUqH0yTMCdu50/dOROZ4xMIONTU1KCoqQkJCgmmel5cXEhISUFhYqGBkrqe8vBwA0LJlS4UjaRrmhDTu8r0TkSUWFna4cOECamtrLYYxb9OmDUpKShSKyvUYjUZMnjwZAwYMkGUobSUxJ2znTt87EVmS/KwQIrnodDoUFxdj+/btSodCTsTvnci9sbCwQ+vWreHt7Y3S0lKz+aWlpYiIiFAoKtcyYcIErFu3Dtu2bUO7du2UDqfJmBO2cbfvnYgs8VSIHfz8/NCnTx/k5eWZ5hmNRuTl5SEuLk7ByNRPCIEJEyYgJycHW7ZsQadOnZQOSRbMiYa56/dORJZ4xMJOqampSElJQd++fREbG4v58+ejqqoK48aNUzo0VdPpdMjOzsaaNWsQFBRkuv4gJCQEAQEBCkfXNMyJ+rnz905E5ni7aRN89NFHmDt3LkpKStCrVy/885//RL9+/ZQOS9U0Go3V+ZmZmRg7dqxzg3EA5oR17v69E9EfWFgQERGRbHiNBREREcmGhQURERHJhoUFERERyYaFBREREcmGhQURERHJhoUFERERyYaFBREREcmGhQURERHJhoUFERERyYaFBREREcmGhQURERHJ5v8Dbsahoiln5RQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 12 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.preprocessing import StandardScaler,PolynomialFeatures,LabelEncoder\n",
    "\n",
    "\n",
    "#load data\n",
    "df=pd.read_csv('data.csv')\n",
    "\n",
    "#Inspect data\n",
    "print(df.head())\n",
    "print(\"============\")\n",
    "print(df.info())\n",
    "print(\"============\")\n",
    "print(df.describe())\n",
    "print(\"============\")\n",
    "\n",
    "\n",
    "# Data Cleaning\n",
    "# Handle missing values\n",
    "\n",
    "numeric_cols = df.select_dtypes(include=['number']).columns\n",
    "categorical_cols = df.select_dtypes(include=[object]).columns\n",
    "\n",
    "df[numeric_cols]=df[numeric_cols].fillna(df[numeric_cols].mean())\n",
    "df[categorical_cols]=df[categorical_cols].apply(lambda x: x.fillna(x.mode()[0]))\n",
    "\n",
    "\n",
    "# Remove duplicates\n",
    "df=df.drop_duplicates()\n",
    "\n",
    "\n",
    "# Correct errors and standardize the data\n",
    "df['JoinDate']=pd.to_datetime(df['JoinDate'])\n",
    "df['Name']=df['Name'].str.title()\n",
    "print(df.head())\n",
    "print(\"Afetr Correct errors and standardize the data\")\n",
    "print(df.head())\n",
    "\n",
    "\n",
    "# Feature Engineering\n",
    "# Normalize and scale numerical features\n",
    "scaler = StandardScaler()\n",
    "print(df.head())\n",
    "df[numeric_cols]=scaler.fit_transform(df[numeric_cols])\n",
    "print(\"After Normalize and scale numerical features\")\n",
    "print(df.head())\n",
    "\n",
    "# Encode categorical features \n",
    "df=pd.get_dummies(df,columns=['Department','PerformanceScore'])\n",
    "print(\"After Encode categorical features\")\n",
    "print(df.head())\n",
    "\n",
    "poly=PolynomialFeatures(degree=2,interaction_only=True)\n",
    "interaction_features = poly.fit_transform(df[numeric_cols])\n",
    "df=pd.concat([df,pd.DataFrame(interaction_features)],axis=1)\n",
    "\n",
    "#Statistical Analysis\n",
    "print(df.describe())\n",
    "df.hist()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[$z = \\frac{x - \\mu}{\\sigma}$] "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "llm-learning",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
